#include "sys.h"
#include "stm32f0xx.h"

uint32_t currentTick = 0; // 定义变量 记录系统运行时间
bool enterSleep = false;

void softReset(void) {
    __disable_irq(); // 防止中断打断重置流程
    SCB->AIRCR = (0x5FA << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk;
    while (1); // 确保复位操作完成
}

void SysTick_Handler(void) { // SysTick中断
    currentTick++; // 增加系统运行时间记录
}

void wkupInit(void) {
    // 使能PWR和SYSCFG时钟
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;
    RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
    // 配置PA0为输入模式，并设置为下拉
    GPIOA->MODER &= ~(GPIO_MODER_MODER0_Msk); // 输入模式
    GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR0_Msk); // 清除PA0的上拉/下拉配置位
    GPIOA->PUPDR |= (GPIO_PUPDR_PUPDR0_0); // 设置PA0为下拉模式
    PWR->CSR |= PWR_CSR_EWUP1; // 使能 PA0 作为唤醒引脚
}

void enterStandbyMode(void) {
    PWR->CR |= PWR_CR_CWUF; // 清除唤醒标志
    PWR->CR |= PWR_CR_PDDS; // 设置 PDDS 位，选择待机模式
    SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; // 设置深度睡眠模式
    __WFI(); // 进入待机模式，任意中断唤醒
}
